/*
package com.shujia.flink.core

import org.apache.flink.api.common.RuntimeExecutionMode
import org.apache.flink.streaming.api.scala._

object Demo2WordCountBatch {
  def main(args: Array[String]): Unit = {
    //1、创建flink执行环境
    val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment

    /**
     * 2、修改处理模式
     * RuntimeExecutionMode.BATCH：批处理模式底层也是mapreduce模型
     * 批处理输出最终结果
     * 批处理模式只能用于处理有界流
     *
     * RuntimeExecutionMode.STREAMING (默认)
     * 流处理是输出连续结果
     * 流处理模式可以处理有界流，也可以处理无界流
     */
    env.setRuntimeMode(RuntimeExecutionMode.BATCH)

    //3、读取文件（有界流）
    val linesDS: DataStream[String] = env.readTextFile("data/words")
    /**
     * 3、统计单词的数量
     */
    //将一行转换成多行
    val wordsDS: DataStream[String] = linesDS.flatMap(line => line.split(","))
    //转换成kv格式
    val kvDS: DataStream[(String, Int)] = wordsDS.map(word => (word, 1))
    //按照单词分组
    val keyByDS: KeyedStream[(String, Int), String] = kvDS.keyBy(kv => kv._1)
    //统计每个单词的数量
    //sum底层就是有状态计算，会基于之前的结果进行计算
    val countDS: DataStream[(String, Int)] = keyByDS.sum(1)

    countDS.print()

    env.execute()
  }
}
*/
